package com.web.utils;

import java.io.File;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;

public class FileUtils {
	
	public static String getType(String name) {
		if (StringUtils.isEmpty(name)) {
			return null;
		}
		return StringUtils.substring(name,
				StringUtils.lastIndexOf(name, ".") + 1);
	}
	
	/**
	 * 检查文件是否是图片类型
	 * @param file
	 * @return
	 */
	public static boolean checkPhotoFile(MultipartFile file) {
		if (file.isEmpty()) {
			return false;
		}
		if (file.getContentType().equals("image/jpg")
				|| file.getContentType().equals("image/png")
				|| file.getContentType().equals("image/jpeg")
				|| file.getContentType().equals("image/gif")) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 检查文件
	 * @param file
	 * @return
	 */
	public static boolean checkFile(MultipartFile file) {
		if (file.isEmpty()) {
			return false;
		}
		if (file.getContentType().equals("application/pdf")
				|| file.getContentType().equals("application/octet-stream")
				|| file.getContentType().equals("application/msword")
				|| file.getContentType().equals("application/x-ppt")
				|| file.getContentType().equals("text/plain")) {
			return true;
		} else {
			return false;
		}
	}
	
	/**
	 * 保存文件
	 * @param file
	 * @param request
	 * @return
	 * @throws IOException
	 */
	public static String saveFile(MultipartFile file, HttpServletRequest request) throws IOException {

		String md5 = DigestUtils.md5Hex(file.getBytes());// 获取文件md5
		String oldName = file.getOriginalFilename();
		String type = FileUtils.getType(oldName);
		String nameName = md5 + "." + type;

		String rootPath = request.getSession().getServletContext()
				.getRealPath("/");// 获取服务器项目

		String relativePath = "upload" + "/" + nameName;// 现在的相对地址
		String path = rootPath + "/" + relativePath;// 存放在磁盘的地址

		File source = new File(path.toString());// 生成文件对象

		file.transferTo(source);// 把文件写入磁盘

		return relativePath;// 返回相对地址
	}

}
